import Config from '@/config/index.js'; // 引入配置文件
import getStatusCode from './statusCode.js'; // 引入获取状态码的函数
import getErrMsg from './errMsg.js'; // 引入获取错误信息的函数
// 全局请求封装
const baseUrl = Config.baseUrl; // 获取请求的基础路径
// 请求超出时间
const timeout = 5000; // 设置请求超时时间为5秒

// 需要修改token，和根据实际修改请求头
export default (options = {}) => {
	let {
		url,
		method = `get`, // 默认请求方法为get
		data = {}, // 默认请求数据为空对象
		header = {} // 默认请求头为空对象
	} = options; // 解构赋值

	header['Content-Type'] = 'application/json;charset=UTF-8'; // 设置请求头为json格式
	if (method == "post") {
		header['Content-Type'] = 'multipart/form-data'; // 如果请求方法为post，则设置请求头为form-data格式
	}
	uni.showLoading({
		title: options.loadTip || '数据加载中...', // 显示加载中提示
		mask: true
	});
	if (method === `file`) {
		uni.uploadFile({
			url,
			header,
			filePath: data.filePath,
			name: `file`,
			formData: data,
			timeout,
			success: (res) => {
				// 根据返回的状态码做出对应的操作
				//获取成功
				if (res.statusCode == 200) {
					resolve(res.data);
				} else {
					getStatusCode(res.statusCode);
				}
			},
			fail: (err) => {
				console.log(`【${url}】`, `fail`, err);
				getErrMsg(err);
				reject();
			},
			complete: () => {
				// 不管成功还是失败都会执行
				uni.hideLoading();
				uni.hideToast();
			}
		});
	} else {
		return new Promise((resolve, reject) => {
			uni.request({
				url: baseUrl + url,
				method: method,
				header: header,
				data: data,
				timeout,
				success(res) {
					// 根据返回的状态码做出对应的操作
					//获取成功
					if (res.statusCode == 200) {
						resolve(res.data);
					} else {
						getStatusCode(res.statusCode);
					}
				},
				fail(err) {
					console.log(`【${url}】`, `fail`, err);
					getErrMsg(err);
					reject(err);

				},
				complete() {
					// 不管成功还是失败都会执行
					uni.hideLoading();
					uni.hideToast();
				}
			});
		}).catch(() => {});
	}

};